﻿using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace SlideRight.Konfiguration
{
    /// <summary>
    /// Klasse zur verwaltung und Speichern der Konfiguration des Programms
    /// </summary>
    public class Konfig
    {
        private string _datei;

        public Konfig(string Datei)
        {
            _datei = Application.StartupPath + "\\"  + Datei + ".conf";
        }

        /// <summary>
        /// Speichert den Wert einer Konfiguration oder fügt eine Konfiguration der Datei hinzu.
        /// </summary>
        /// <param name="Konfig">Konfiguration die gespeichert werden soll.</param>
        /// <param name="Wert">Wert der Konfiguration.</param>
        public void Speichern(string Konfig, string Wert)
        {
            StreamReader Datei;
            string _Datei = "";
            string zeile;
            string[] temp;
            bool KonfigGefunden = false;

            // Überprüfen ob Datei existiert
            if (File.Exists(_datei))
            {
                // Datei auslesen und den Wert der Konfiguration überschreiben
                Datei = new StreamReader(_datei);
                while (!Datei.EndOfStream)
                {
                    zeile = Datei.ReadLine();
                    temp = zeile.Split('=');

                    if (temp[0] == Konfig)
                    {
                        KonfigGefunden = true;
                        temp[1] = Wert;
                    }
                    zeile = temp[0] + "=" + temp[1] + "\r\n";
                    _Datei += zeile;
                }
                Datei.Close();

                // Falls die Konfiguration nicht überschrieben werden konnte da sie nicht vorhanden ist.
                // Fallback => Konfigurations Punkt anlegen und wert zuweisen.
                if (KonfigGefunden)
                {
                    StreamWriter Schreiber = new StreamWriter(_datei);
                    Schreiber.Write(_Datei);
                    Schreiber.Close();
                }
                else
                {
                    StreamWriter Schreiber = new StreamWriter(_datei, true);
                    Schreiber.Write(Konfig + "=" + Wert + "\r\n");
                    Schreiber.Close();
                }
            }
            else // Falls die Datei nicht vorhanden ist Datei schreiben und ersten Konfigurations Punkt eintragen.
            {
                StreamWriter Schreiber = new StreamWriter(_datei, true);
                Schreiber.Write(Konfig + "=" + Wert + "\r\n");
                Schreiber.Close();
            }
        }

        /// <summary>
        /// Gibt den Wert einer Einstellung/Konfiguration aus der Konfig Datei Zurück
        /// </summary>
        /// <param name="Konfig">Welcher Wert Zurückgegebn werden soll.</param>
        /// <returns>Den angeforderten Wert oder - falls nicht vorhanden.</returns>
        public string Wert(string Konfig)
        {
            string Wert = "";
            
            // Fallback falls die Konfiguration nicht existiert
            // In diesem Fall wird der wert auf "" gesetzt so das die Eingabe Felder Leer sind.
            if (File.Exists(_datei))
            {
                StreamReader Datei = new StreamReader(_datei);
                string zeile;
                string[] temp;

                // Datei Zeile für Zeile auslesen und überprüfen ob sie den Gewünschten Konfigurations Punkt beinhaltet.
                while (!Datei.EndOfStream)
                {
                    zeile = Datei.ReadLine();
                    temp = zeile.Split('=');

                    if (temp[0] == Konfig)
                    {
                        Wert = temp[1];
                        Datei.ReadToEnd();
                    }
                }
                Datei.Close();
            }
            else // "Wert" als Fallback noch einen Wert zuweisen damit alle Code Pfade einen Wert zurückgeben.  
            {
                Wert = "";
            }

            return Wert;
        }
    }
}
